/**
 * 
 */
package timeBerechnen;

import java.text.DecimalFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;

/**
 * @author Schweingruber Roger
 * 
 */
public class Time {

	private final String[] DAYS = { "Sonntag", "Montag", "Dienstag",
			"Mittwoch", "Donnerstag", "Freitag", "Samstag" };

	/**
	 * Wandelt milisekunden in das Datumsformat um
	 * 
	 * @param milisekunden
	 * @return Tage
	 */
	public String getDatum(long milisekunden) {

		Calendar cal = new GregorianCalendar();
		cal.setTimeInMillis(milisekunden);

		int tag = cal.get(Calendar.DAY_OF_MONTH);
		int monat = cal.get(Calendar.MONTH + 1);
		int jahr = cal.get(Calendar.YEAR);

		return String.valueOf(tag) + "." + String.valueOf(monat) + "."
				+ String.valueOf(jahr);

	}

	/**
	 * Wandelt milisekunden in das Zeitformat "h:min" um
	 * 
	 * @param milisekunden
	 * @return H : min
	 */
	public String getZeitMin(long milisekunden) {
		if (milisekunden != 0) {
			Calendar cal = new GregorianCalendar();
			cal.setTimeInMillis(milisekunden);

			int stunden = cal.get(Calendar.HOUR_OF_DAY);
			int minuten = cal.get(Calendar.MINUTE);

			DecimalFormat twoDigits = new DecimalFormat("00");

			return String.valueOf(twoDigits.format(stunden)) + ":" + String.valueOf(twoDigits.format(minuten));
		} else {
			return "";
		}
	}

	/**
	 * Wandelt milisekunden in das Zeitformat "h:min:s" um
	 * 
	 * @param milisekunden
	 * @return H : min : s
	 */
	public String getZeitSec(long milisekunden) {

		Calendar cal = new GregorianCalendar();
		cal.setTimeInMillis(milisekunden);

		int stunden = cal.get(Calendar.HOUR_OF_DAY);
		int minuten = cal.get(Calendar.MINUTE);
		int sekunden = cal.get(Calendar.SECOND);

		return String.valueOf(stunden) + ":" + String.valueOf(minuten) + ":"
				+ String.valueOf(sekunden);
	}

	/**
	 * Wandelt milisekunden in den Wochentag um
	 * 
	 * @param milisekunden
	 * @return Wochentag
	 */
	public String getWochenTag(long milisekunden) {
		Calendar cal = new GregorianCalendar();
		cal.setTimeInMillis(milisekunden);

		String wochentag = DAYS[cal.get(Calendar.DAY_OF_WEEK) - 1];

		return wochentag;

	}

	/**
	 * 
	 * @param milisekunden
	 * @return Wochennr
	 */
	public String getWochenNr(long milisekunden) {
		Calendar cal = new GregorianCalendar();
		cal.setTimeInMillis(milisekunden);

		int wochenNr = cal.get(Calendar.WEEK_OF_YEAR);

		return String.valueOf(wochenNr);
	}

	/**
	 * 
	 * @param milisekunden
	 * @return differenz
	 */
	public String getDifferenz(long milisekunden) {
		if (milisekunden != 0) {
			Calendar cal = new GregorianCalendar();
			cal.setTimeInMillis(milisekunden);

			int stunden = cal.get(Calendar.HOUR_OF_DAY) - 1;
			int minuten = cal.get(Calendar.MINUTE);
			int sekunden = cal.get(Calendar.SECOND);

			// Aufrunden
			if (sekunden >= 30) {
				minuten += 1;
			}
			
			DecimalFormat twoDigits = new DecimalFormat("00");
			
			return String.valueOf(twoDigits.format(stunden)) + ":" + String.valueOf(twoDigits.format(minuten));
			
		} else {
			return "";
		}
	}

	/**
	 * Wandelt milisekunden in tage um
	 * 
	 * @param milisekunden
	 * @return
	 */
	public long getTagNr(long milisekunden) {
		Calendar cal = new GregorianCalendar();
		cal.setTimeInMillis(milisekunden);

		long stundenGes = milisekunden / 3_600_000;

		long stundenTag = cal.get(Calendar.HOUR_OF_DAY);

		// Anfang des Tages bestimmen
		long anfang = stundenGes - stundenTag;

		// Ende des Tages bestimmen
		long ende = (24 - stundenTag) + stundenGes;

		// Anfang und Ende in milisekunden umrechnen
		long anfangMS = anfang * 3_600_000;

		return anfangMS;
	}
}
